package com.matrix.merchant.service;

import com.matrix.api.merchant.dto.MerchantApplicationDTO;
import com.matrix.api.merchant.dto.MerchantReviewDTO;
import com.matrix.api.merchant.dto.ShopTableDTO;
import com.matrix.api.merchant.dto.ShopUpdateDTO;
import com.matrix.api.merchant.vo.MerchantApplicationVO;
import com.matrix.api.merchant.vo.ShopBriefInfoVO;
import com.matrix.api.merchant.vo.ShopTableVO;
import com.matrix.api.merchant.vo.ShopDetailVO;
import com.matrix.api.merchant.vo.ShopInfoVO;
import com.matrix.common.domain.PageResult;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 商家服务接口定义
 * </p>
 *
 * @author 有点甜
 * @since 2025/7/26
 */
public interface MerchantService {

    /**
     * 提交商家入驻申请
     *
     * @param userId         申请人ID
     * @param applicationDTO 申请信息
     */
    void applyForSettlement(Long userId, MerchantApplicationDTO applicationDTO);

    /**
     * 根据店铺ID获取店铺的详细信息
     *
     * @param shopId 店铺ID
     * @return 店铺详情VO
     */
    ShopDetailVO getShopDetailsById(Long shopId);

    /**
     * 获取当前登录商家的店铺详细信息
     *
     * @param ownerId 店主ID
     * @return 店铺详情VO
     */
    ShopDetailVO getMyAndShopInfo(Long ownerId);

    /**
     * 更新店铺信息
     *
     * @param ownerId       店主ID
     * @param shopUpdateDTO 店铺更新信息DTO
     */
    void updateShopInfo(Long ownerId, ShopUpdateDTO shopUpdateDTO);

    /**
     * 更新店铺的照片列表
     *
     * @param ownerId   店主ID
     * @param photoUrls 照片URL列表
     */
    void updateShopPhotos(Long ownerId, List<String> photoUrls);

    /**
     * 创建桌台
     *
     * @param ownerId  店主ID
     * @param tableDTO 桌台信息DTO
     * @return 创建的桌台VO
     */
    ShopTableVO createTable(Long ownerId, ShopTableDTO tableDTO);

    /**
     * 更新桌台信息
     *
     * @param ownerId  店主ID
     * @param tableId  桌台ID
     * @param tableDTO 桌台信息DTO
     * @return 更新后的桌台VO
     */
    ShopTableVO updateTable(Long ownerId, Long tableId, ShopTableDTO tableDTO);

    /**
     * 删除桌台
     *
     * @param ownerId 店主ID
     * @param tableId 桌台ID
     */
    void deleteTable(Long ownerId, Long tableId);

    /**
     * 获取店铺的所有桌台信息
     *
     * @param ownerId 店主ID
     * @return 所有桌台VO的列表
     */
    List<ShopTableVO> listTables(Long ownerId);

    /**
     * 更新桌台状态
     *
     * @param ownerId 店主ID
     * @param tableId 桌台ID
     * @param status  新的状态
     */
    void updateTableStatus(Long ownerId, Long tableId, Integer status);
}
